package a_doubleWrite;

import java.util.HashMap;
import java.util.Map;

/**
 * 205. 同构字符串
 * 给定两个字符串 s 和 t，判断它们是否是同构的。
 * <p>
 * 如果 s 中的字符可以按某种映射关系替换得到 t ，那么这两个字符串是同构的。
 * <p>
 * 每个出现的字符都应当映射到另一个字符，同时不改变字符的顺序。不同字符不能映射到同一个字符上，
 * 相同字符只能映射到同一个字符上，字符可以映射到自己本身。
 * <p>
 * 输入：s = "egg", t = "add"
 * 输出：true
 *
 * @author luolidong
 * @version 1.0
 * @create 2021-07-30 10:03
 */
public class L205 {
    public boolean isIsomorphic(String s, String t) {
        String s1 = isIsomorphic(s);
        String s2 = isIsomorphic(t);
        return s1.equals(s2);
    }

    public String isIsomorphic(String s) {
        Map<Character, Integer> map = new HashMap<>();
        for (int i = 0; i < s.length(); i++) {
            if (i == 0) {
                map.put(s.charAt(i), 1);
                continue;
            }
            if (!map.containsKey(s.charAt(i))) {
                map.put(s.charAt(i), map.get(s.charAt(i-1)) + 1);
            }
        }
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < s.length(); i++) {
            sb.append(map.get(s.charAt(i)));
        }
        return sb.toString();
    }

    public static void main(String[] args) {
        L205 l205 = new L205();
        boolean isomorphic = l205.isIsomorphic("apple", "cffmc");

        System.out.println(isomorphic);
    }
}
